package com_1;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class  ReflectDemo1 {//定义一个反射测试类
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
      //main方法入口，并抛出四个异常
        Class<?>c = Class.forName("com.Student");//通过Class.forname方法获取类的class文件，也就是通过反射操作一个类
        Constructor<?> constructor = c.getConstructor(String.class, int.class, int.class);
        //通过getconstructor方法获取类中指定的有参数构造方法。参数为三个
        Object object = constructor.newInstance("诸葛亮", 25, 36);
        //用过newInstance方法获取一个学生类对象
        System.out.println(object);//在控制台输出这个对象
        Constructor<?> declaredConstructor = c.getDeclaredConstructor(String.class);
        //通过getdelecredconstructor方法获取了学生类中带一个参数的私有构造方法
        declaredConstructor.setAccessible(true);//通过暴力反射取消了私有权限修饰符的作用
        Object object1 = declaredConstructor.newInstance("曹操");//再通过newinstance方法获取学生类的对象同时进行赋值
        System.out.println(object1);//输出对象
    }
}
